<?php

declare(strict_types=1);

namespace app\model\ec;

use think\Model;
use app\eslib\EsUtils;

/**
 * 订单模型类
 * @version 1.0.0
 */
class OrdersModel extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'ec_orders';

    // 开启自动时间戳（默认为整型int）
    protected $autoWriteTimestamp = true;

    // 定义时间戳字段名
    protected $createTime = 'created_at';
    protected $updateTime = 'updated_at';

    /**
 * 返回 订单标识 访问器的数据
 * @return array
 */
public function getFlagDataAttr(): array
{
    return [
        ['text' => '手机充值', 'value' => 'mobile'],
    ];
}

/**
 * 返回 订单标识 访问器的值
 * @return string
 */
public function getFlagTextAttr()
{
    $value = $this->getData('flag');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getFlagDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 支付方式 访问器的数据
 * @return array
 */
public function getPaymentTypeDataAttr(): array
{
    return [
        ['text' => '银行卡,alipay=支付宝,weixin=微信', 'value' => 'bank'],
    ];
}

/**
 * 返回 支付方式 访问器的值
 * @return string
 */
public function getPaymentTypeTextAttr()
{
    $value = $this->getData('payment_type');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getPaymentTypeDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 是否显示 访问器的数据
 * @return array
 */
public function getIsVisibleDataAttr(): array
{
    return [
        ['text' => '隐藏,1=显示', 'value' => 0],
    ];
}

/**
 * 返回 是否显示 访问器的值
 * @return string
 */
public function getIsVisibleTextAttr()
{
    $value = $this->getData('is_visible');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getIsVisibleDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 订单状态 访问器的数据
 * @return array
 */
public function getStatusDataAttr(): array
{
    return [
        ['text' => '待确认,1=待发货,2=待收货,3=已收货,4=已完成,5=已退款,6=已取消,7=已关闭', 'value' => 0],
    ];
}

/**
 * 返回 订单状态 访问器的值
 * @return string
 */
public function getStatusTextAttr()
{
    $value = $this->getData('status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 分销提成状态 访问器的数据
 * @return array
 */
public function getPromoterCommissionStatusDataAttr(): array
{
    return [
        ['text' => '未提成,1=已提成,2=已退款', 'value' => 0],
    ];
}

/**
 * 返回 分销提成状态 访问器的值
 * @return string
 */
public function getPromoterCommissionStatusTextAttr()
{
    $value = $this->getData('promoter_commission_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getPromoterCommissionStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 评价状态 访问器的数据
 * @return array
 */
public function getEvaluationStatusDataAttr(): array
{
    return [
        ['text' => '未评价,1=已评价,2=已过期未评价', 'value' => 0],
    ];
}

/**
 * 返回 评价状态 访问器的值
 * @return string
 */
public function getEvaluationStatusTextAttr()
{
    $value = $this->getData('evaluation_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getEvaluationStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 支付状态 访问器的数据
 * @return array
 */
public function getPayStatusDataAttr(): array
{
    return [
        ['text' => '未支付,1=已支付,2=已退款,3=部分退款', 'value' => 0],
    ];
}

/**
 * 返回 支付状态 访问器的值
 * @return string
 */
public function getPayStatusTextAttr()
{
    $value = $this->getData('pay_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getPayStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 订单来源 访问器的数据
 * @return array
 */
public function getSourceDataAttr(): array
{
    return [
        ['text' => 'PC,2=手机', 'value' => 0],
    ];
}

/**
 * 返回 订单来源 访问器的值
 * @return string
 */
public function getSourceTextAttr()
{
    $value = $this->getData('source');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getSourceDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 申请类型 访问器的数据
 * @return array
 */
public function getRefundTypeDataAttr(): array
{
    return [
        ['text' => '仅退款,2=退货退款', 'value' => 0],
    ];
}

/**
 * 返回 申请类型 访问器的值
 * @return string
 */
public function getRefundTypeTextAttr()
{
    $value = $this->getData('refund_type');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getRefundTypeDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 退货类型 访问器的数据
 * @return array
 */
public function getReturnTypeDataAttr(): array
{
    return [
        ['text' => '不用退货,1=全部退货,2=部分退货', 'value' => 0],
    ];
}

/**
 * 返回 退货类型 访问器的值
 * @return string
 */
public function getReturnTypeTextAttr()
{
    $value = $this->getData('return_type');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getReturnTypeDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 退货状态 访问器的数据
 * @return array
 */
public function getReturnStatusDataAttr(): array
{
    return [
        ['text' => '未退货,41=申请中,42=已退货', 'value' => 0],
    ];
}

/**
 * 返回 退货状态 访问器的值
 * @return string
 */
public function getReturnStatusTextAttr()
{
    $value = $this->getData('return_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getReturnStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 管理员审核状态 访问器的数据
 * @return array
 */
public function getReturnAuditStatusDataAttr(): array
{
    return [
        ['text' => '待审核,2=同意,3=不同意', 'value' => 0],
    ];
}

/**
 * 返回 管理员审核状态 访问器的值
 * @return string
 */
public function getReturnAuditStatusTextAttr()
{
    $value = $this->getData('return_audit_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getReturnAuditStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}
/**
 * 返回 物流状态 访问器的数据
 * @return array
 */
public function getReturnDeliveryStatusDataAttr(): array
{
    return [
        ['text' => '待发货,2=待收货,3=未收到,4=已收货', 'value' => 0],
    ];
}

/**
 * 返回 物流状态 访问器的值
 * @return string
 */
public function getReturnDeliveryStatusTextAttr()
{
    $value = $this->getData('return_delivery_status');
    if (is_numeric($value)) {
        $value = intval($value);
    }
    $data = (array) $this->getReturnDeliveryStatusDataAttr();
    $result = array_filter($data, function ($v) use ($value) {
        return $v['value'] == $value;
    }, ARRAY_FILTER_USE_BOTH);
    return $result ? current($result)['text'] : $value;
}

    /**
     * 使用视图查询
     */
    public function scopeDbView($query)
    {
        return $query->table('v_ec_order');
    }

    /**
     * 复制指定的记录
     */
    public static function copy($id)
    {
        $data = self::find($id)->toArray();
        $data['xxx_name'] .= ' - 副本';
        unset($data['id']);
        unset($data['created_at']);
        unset($data['updated_at']);
        try {
            $model = self::create($data);
            return EsUtils::stdMessage(true, '', $model->id);
        } catch (\PDOException $ex) {
            return EsUtils::stdMessage(false, $ex->getMessage());
        }
    }
}
